深度学习模型压缩算法综述
The following article is from 狗熊会 Author 颜玮琳
背景介绍
剪枝与量化(parameter pruning and quantization)
1.量化与二值化(quantization and binarization)
2.网络剪枝(network pruning)
权重剪枝(weight pruning):此方法主要应用于对不重要的连接权重进行修剪。如果连接权重低于预先设定的某个阈值,则该连接权重将会被修剪(Han et al. 2015)。 神经元剪枝(neuron pruning):此方法与逐个修剪权重的方法不同,它直接移除某个冗余的神经元。这样一来,该神经元的所有传入和传出连接也将被移除(Srinivas and Babu 2015)。 卷积核剪枝(filter pruning):此方法依据卷积核的重要程度将其进行排序,并从网络中修剪最不重要/排名最低的卷积核。卷积核的重要程度可以通过或范数或一些其他方法计算(Li et al. 2016)。 层剪枝(layer pruning):此方法主要应用于一些非常深度的网络,可以直接修剪其中的某些层(Chen and Zhao 2018)。
在全连接层上剪枝:考虑一个输入层、隐藏层和输出层分别具有3、2和1个神经元的前馈神经网络,如图3所示。
其中, 、 、是网络的输入,是从当前层中节点的层到下一层中的节点的权重。从图3(a)可以清楚地看出,目前总共有8个连接权重,如果删除两个橙色(虚线)的连接,那么总连接权重将减少到6个。类似地,从图3(b)中,如果移除红色神经元,那么其所有相关的连接权重(虚线)也将被移除,导致总连接权重减少到4个(参数数量减少50%)。
在卷积层上剪枝:在卷积神经网络中,卷积核应用于每个输入的图像,,并且经过卷积操作后输出特征映射,。其中,和是卷积核的尺寸,是输入图像中输入通道的数量,是应用的卷积核的数量,和是输入图像的尺寸,和是结果特征映射的输出尺寸。输出特征映射的形状计算如下:
其中,为步长(stride),为填充(padding)。图4显示了最简单的CNN形式,其中输入图像的大小为,应用的卷积核大小为(2是卷积核的数量)。
3.结构矩阵(structural matrix)
低秩因子分解(low-rank factorization)
1.对矩阵的分解
满秩分解。对任何给定的矩阵,其秩,则的满秩分解可以表示为,其中,。如果远小于或,我们称为低秩矩阵(low-rank matrix)。通过满秩分解可以将空间复杂度从显著减小到。特别地,当和非常接近,并且原始矩阵是行(或列)满秩时,这种减小空间复杂度的作用会失效。满秩分解方法对于全连接层十分有效,特别是当两层之间的神经元数量相差很大或权重矩阵低秩稀疏时。给定一个较小的正整数,可以通过如下的式子求解最优的,,其中,表示Frobenius范数。
SVD。SVD是一种将原始权重矩阵分解为三个较小的矩阵以替换原始权重矩阵的方法。对于任意的矩阵,存在分解,其中,,,。和是正交矩阵,是对角线上只有奇异值的对角矩阵,其中的每一个元素都比其下一个对角线上的元素大。这种方法可以使空间复杂度从减小到。实际应用中,可以用更小的替换,这种方法称为截断奇异值分解(truncated SVD, TSVD)。在前馈神经网络和卷积神经网络中,SVD是一种常用的分解方法,主要用于减少参数的个数。
2.对三维及三维以上张量的分解
Tucker分解。该方法是将TSVD方法中的对角矩阵扩展为张量的一种方法。TSVD和Tucker分解之间的关系可以用图6来表示:
其中,6(a)表示TSVD的过程,6(b)表示Tucker分解的过程。定义对于阶张量和矩阵 ,和之间的乘积是,并且是一个阶张量。有了这个前提,对于一个阶的张量,它能够被分解为一个核张量和个因子矩阵,其中就是张量分解所生成的矩阵的秩,核张量与原始张量的阶数相同。则这个过程可以写成如下的形式:
CP分解。该分解是Tucker分解的一种特殊形式。如果Tucker分解中的每个等于正整数,并且核张量满足,除了之外的所有元素都是0,此时Tucker分解就成为了CP分解。与Tucker分解相比,CP分解常用于解释数据的组成成分,而前者主要用于数据压缩。图7展示了三阶张量被R个组成部分分解的过程,这个过程也可以用如下的公式来表示,其中,,,(Marcella Astrid and Seung- and Ik Lee 2018)。
迁移/压缩卷积滤波器(transferred/compact convolutional filters)
其中,是基础的卷积滤波器,是由激活与相反的移位(shift)构成的滤波器,并且这些移位是在最大池(max-pooling)操作后选择的。通过这样操作,就可以很容易的实现在所有卷积层上的二倍压缩率。它还表明,否定变换作为一个强大的正则化方法,能够用以提高分类精度。一种直观的理解是,具有成对正负约束的学习算法可以产生实用而不是冗余的的卷积滤波器。此外,Zhai et al.(2016)将定义为应用于2维滤波器的平移函数集:
其中,表示第一个操作数沿其空间维度平移,并在边界处进行适当的零填充以保持形状。提出的框架可用于公式(1)改善分类精度的问题,进而作为maxout网络的正则化版本。
蒸馏学习(knowledge distillation)
蒸馏学习(knowledge distillation,KD)是指通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。KD与迁移学习(transfer learning)不同,在迁移学习中,我们使用相同的模型体系结构和学习的权重,仅根据应用的要求使用新层来替换部分全连接层。而在KD中,通过在大数据集上训练的更大的复杂网络(也称之为教师模型(teacher model))学习到的知识可以迁移到一个更小、更轻的网络上(也称之为学生模型(student model))。前一个大模型可以是单个的大模型,也可以是独立训练模型的集合。KD方法的主要思想是通过softmax函数学习课堂分布输出,将知识从大型教师模型转换为一个更小的学生模型。从教师模型训练学生模型的主要目的是学习教师模型的泛化能力。
在现有的KD方法中,学生模型的学习依赖于教师模型,是一个两阶段的过程。Lan et al.(2018)提出了实时本地集成(On-the-fly Native Ensemble,ONE),这是一种高效的单阶段在线蒸馏学习方法。在训练期间,ONE添加辅助分支以创建目标网络的多分支变体,然后从所有分支中创建本地集成教师模型。对于相同的目标标签约束,可以同时学习学生和每个分支。每个分支使用两个损失项进行训练,其中最常用的就是最大交叉熵损失(softmax cross-entropy loss)和蒸馏损失(distillation loss)。
在网络压缩这一步,可以使用深度神经网络方法来解决这个问题。Romero et al.(2015)提出了一种训练薄而深的网络的方法,称为FitNets,用以压缩宽且相对较浅(但实际上仍然很深)的网络。该方法扩展了原来的思想,允许得到更薄、更深的学生模型。为了学习教师网络的中间表示,FitNet让学生模仿老师的完全特征图。然而,这样的假设太过于严格,因为教师和学生的能力可能会有很大的差别。
基于蒸馏学习的方法可以使模型的深度变浅,并且能够显著降低计算成本。然而,这个方法也存在一些弊端。其中之一是KD方法只能应用于具有softmax损失函数的任务中。再者就是,与其他类型的方法相比,基于蒸馏学习的方法往往具有较差的竞争性能。
面临的问题
当前的大多数先进方法建立在精心设计的CNN模型之上,这些模型限制了更改配置的自由度(例如,网络架构、超参数等)。为了处理更复杂的任务,未来应该提供更加合理的方法来配置压缩模型。 各种小型平台(例如移动设备、机器人、自动驾驶汽车等)的硬件限制仍然是阻碍深层CNN扩展的主要问题。如何充分利用有限的计算资源以及如何为这些平台设计特殊的压缩方法仍然是需要解决的问题。 剪枝是压缩和加速CNN的有效方法。目前的剪枝技术大多是为了修剪神经元之间的连接而设计的。此外,对通道进行剪枝能够直接减少特征映射的宽度并压缩模型。这种方法虽然很有效,但是修剪通道可能会显著地改变下一层的输入,因此也存在挑战性。 如前所述,结构矩阵和迁移卷积滤波器的方法必须使模型具有人类的先验知识,这将会显著影响模型的性能和稳定性。研究如何控制强加这些先验知识带来的影响至关重要。 蒸馏学习的方法具有很多的优点,比如无需特定的硬件就能够直接加速模型。开发基于KD的更多方法并且探索如何提高其性能是未来主要的发展方向。 尽管这些压缩方法取得了巨大的成就,但是黑箱机制(black box mechanism)仍然是其应用的关键障碍。比如,某些神经元/连接被修剪的原因尚不清楚。探索这些方法的解释能力仍然是一个重大挑战。
参考文献
[1] Gong Y, Liu L, Ming Y, et al. Compressing Deep Convolutional Networks using Vector Quantization[J]. Computer Science, 2014.
[2] Vanhoucke V, Senior A, Mao M Z. Improving the speed of neural networks on CPUs[C]// Deep Learning and Unsupervised Feature Learning Workshop, NIPS 2011. 2011.
[3] Han S, Pool J, Tran J, et al. Learning both Weights and Connections for Efficient Neural Networks[J]. MIT Press, 2015.
[4] Srinivas S, Babu R V. Data-free parameter pruning for Deep Neural Networks[J]. Computer Science, 2015:2830-2838.
[5] Li H, Kadav A, Durdanovic I, et al. Pruning Filters for Efficient ConvNets[J]. 2016.
[6] Chen S, Zhao Q. Shallowing Deep Networks: Layer-wise Pruning based on Feature Representations[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2018, pp. 1-1.
[7] Sindhwani V, Sainath T N, Kumar S. Structured Transforms for Small-Footprint Deep Learning[J]. MIT Press, 2015, pp. 3088–3096.
[8] Cheng Y, Yu F X, Feris R S, et al. An exploration of parameter redundancy in deep networks with circulant projections[J]. IEEE, 2015.
[9] Cheng Y, Yu F X, Feris R S, et al. Fast Neural Networks with Circulant Projections[J]. IEEE, 2015.
[10] C Granés Santamaria. Compression of convolutional neural networks using Tucker Decomposition. 2017.
[11] Deng L, Li G, Han S, et al. Model Compression and Hardware Acceleration for Neural Networks: A Comprehensive Survey[J]. Proceedings of the IEEE, 2020, 108(4):485-532.
[12] Marcella Astrid and Seung‐ and Ik Lee. Deep compression of convolutional neural networks with low‐rank approximation[J]. ETRI Journal, 2018, 40.0(4.0).
[13] Cohen T S, Welling M. Group Equivariant Convolutional Networks[C]// International Conference on Machine Learning (ICML). 2016.
[14] Shang W, Sohn K, Almeida D, et al. Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units[J]. JMLR.org, 2016.
[15] Zhai S, Cheng Y, Lu W, et al. Doubly Convolutional Neural Networks[J]. 2016.
[16] Lan X, Zhu X, Gong S. Knowledge Distillation by On-the-Fly Native Ensemble[J]. 2018, pp. 7528–7538.
[17] Romero A, Ballas N, Kahou S E, et al. FitNets: Hints for Thin Deep Nets[J]. Computer ence, 2015.
- END -